constraints: Add some internal apis
authorMatthias Clasen <mclasen@redhat.com>
Sat, 29 Jun 2019 14:21:58 +0000 (14:21 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 30 Jun 2019 23:10:11 +0000 (00:10 +0100)
Checking if a set is empty or a singleton can
be done more efficiently than determining its size.

gtk/gtkconstraintexpression.c
gtk/gtkconstraintexpressionprivate.h
gtk/gtkconstraintsolver.c

index 382d9514b990c1e1f39d28d3a5c7ed9baf467d24..f3a0a37f7997d3351a47aac788e190883944a3ec 100644 (file)
@@ -505,6 +505,18 @@ gtk_constraint_variable_set_size (GtkConstraintVariableSet *set)
   return g_sequence_get_length (set->set);
 }
 
+gboolean
+gtk_constraint_variable_set_is_empty (GtkConstraintVariableSet *set)
+{
+  return g_sequence_is_empty (set->set);
+}
+
+gboolean
+gtk_constraint_variable_set_is_singleton (GtkConstraintVariableSet *set)
+{
+  return g_sequence_iter_next (g_sequence_get_begin_iter (set->set)) == g_sequence_get_end_iter (set->set);
+}
+
 /*< private >
  * GtkConstraintVariableSetIter:
  *
index b498f88594896adb86ff026a4a21e7d65d6f30b9..942915ad389a83acc2c0b5629f77663307903f7c 100644 (file)
@@ -94,6 +94,12 @@ gboolean
 gtk_constraint_variable_set_remove (GtkConstraintVariableSet *set,
                                     GtkConstraintVariable *variable);
 
+gboolean
+gtk_constraint_variable_set_is_empty (GtkConstraintVariableSet *set);
+
+gboolean
+gtk_constraint_variable_set_is_singleton (GtkConstraintVariableSet *set);
+
 int
 gtk_constraint_variable_set_size (GtkConstraintVariableSet *set);
 
index 278e2e4984f7424e4be2b2341be8bb4d8fa3e9e3..e0f3e418cdcd7c4a8bf788324e888037d74355d8 100644 (file)
@@ -1168,7 +1168,7 @@ gtk_constraint_solver_choose_subject (GtkConstraintSolver *self,
                   GtkConstraintVariableSet *cset = g_hash_table_lookup (self->columns, t_v);
 
                   if (cset == NULL ||
-                      (gtk_constraint_variable_set_size (cset) == 1 &&
+                      (gtk_constraint_variable_set_is_singleton (cset) &&
                        g_hash_table_contains (self->columns, self->objective)))
                     {
                       subject = t_v;
@@ -1865,7 +1865,7 @@ gtk_constraint_solver_remove_constraint (GtkConstraintSolver *self,
 
       if (exit_var == NULL)
         {
-          if (gtk_constraint_variable_set_size (set) == 0)
+          if (gtk_constraint_variable_set_is_empty (set))
             gtk_constraint_solver_remove_column (self, marker);
           else
             {